package cn.tedu.charging.order.controller;

import cn.tedu.charging.common.pojo.JsonResult;
import cn.tedu.charging.order.pojo.param.OrderAddParam;
import cn.tedu.charging.order.service.OrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
@RequestMapping("order")
@Api(tags = "订单模块")
public class OrderController {


    /**
     * Dto 数据传输对象 前端把数据传输到了后端的controller层  前端与后端之间的传输
     * 服务器之间调用A服务 调用 B服务  A服务和B服务都是后端   服务与服务之间的传输
     *
     *
     * 有的公司是 Dto 服务与服务之间传输  用 rpc来进行服务于服务的调用  为了解耦
     * Param 前端与后端之间传输
     *
     * 从功能上讲  用一个O 来表示各层的传输对象是没有问题的
     *
     * @RequestBody把 前端json数据转换为对象
     */
    @Autowired
    private OrderService orderService;
    @ApiOperation("创建订单")
    @PostMapping("create")
    public JsonResult<String> createOrder(@RequestBody OrderAddParam orderAddParam){
        log.debug("创建订单-入参{}",orderAddParam);
        //创建类型的接口  是否要返回出参？ 要根据业务来决定
        //业务要求 用户创建订单后，跳转到订单详情页
        //创建订单接口的 出参 应该返回 订单号
        //订单号 可以 作为订单详情页的入参
        log.debug("创建订单-orderService:入参:{}",orderAddParam);
        String orderNo = orderService.createOrder(orderAddParam);
        log.debug("创建订单-orderService:入参:{},出参:{}",orderAddParam,orderNo);
        JsonResult<String> result = new JsonResult<>();
        result.setData(orderNo);
        result.setCode(2000);
        result.setMessage("创建订单成功");

        log.debug("创建订单入参:{},出参:{}",orderAddParam,result);
        return result;
    }
}
